package com.stq.weixin.api;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.stq.weixin.model.request.WeiXinAccessTokenParam;
import com.stq.weixin.model.response.WeiXinAccessToken;

import java.util.HashMap;
import java.util.Map;

import static com.stq.weixin.config.WeiXinUrlConfig.GETACCESSTOKEN_URL;
import static com.stq.weixin.model.response.WeiXinErrCodeEnum.ERRCODE_NEGATIVE_1;
import static com.stq.weixin.model.response.WeiXinErrCodeEnum.ERRCODE_NEGATIVE_2;

/**
 * 获取小程序全局唯一后台接口调用凭据（access_token）。
 * 调用绝大多数后台接口时都需使用 access_token，开发者需要进行妥善保存
 *
 * @author stqsht@163.com
 * @date 2020-01-28 14:31
 */
public class WeiXinAccessTokenApi {

    public static WeiXinAccessToken getAccessToken(WeiXinAccessTokenParam param) {
        if (StrUtil.isEmpty(param.getAppid()) || StrUtil.isEmpty(param.getSecret())) {
            return new WeiXinAccessToken(ERRCODE_NEGATIVE_2.getErrcode(), ERRCODE_NEGATIVE_2.getErrmsg());
        }
        if (StrUtil.isEmpty(param.getGrantType()) || !StrUtil.equals("client_credential", param.getGrantType())) {
            param.setGrantType("client_credential");
        }
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("appid", param.getAppid());
        map.put("secret", param.getSecret());
        map.put("grant_type", param.getGrantType());
        String s = HttpUtil.get(GETACCESSTOKEN_URL, map);
        if (StrUtil.isEmpty(s)) {
            return new WeiXinAccessToken(ERRCODE_NEGATIVE_1.getErrcode(), ERRCODE_NEGATIVE_1.getErrmsg());
        }
        return JSONObject.parseObject(s, WeiXinAccessToken.class);
    }
}
